home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / GoldED / Add-Ons / envRCS09 / rcs / arexx / wizard.ged < prev   
Text File  |  1999-07-06  |  20KB  |  719 lines

  1. /* $VER: 1.0, ©1997 Dietmar Eilert. Create new RSC project. */
  2.  
  3. OPTIONS RESULTS                             /* enable return codes     */
  4.  
  5. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then    /* not started by Golden ? */
  6.     address 'GOLDED.1'
  7.  
  8. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  9.  
  10. if (RC ~= 0) then
  11.     exit
  12.  
  13. OPTIONS FAILAT 6                            /* ignore warnings         */
  14.  
  15. SIGNAL ON SYNTAX                            /* ensure clean exit       */
  16.  
  17. /* ------------------------ INSERT YOUR CODE HERE: ------------------- */
  18.  
  19. call rcs_login
  20.  
  21. 'REQUEST BODY="This wizard will add RCS control*nto a directory. You will be able*nto choose which documents in the*ndirectory should be supervised." BUTTON="!OK"'
  22.  
  23. if (RC = 0) then do
  24.  
  25.     'QUERY PATH VAR=PATH'
  26.  
  27.     'REQUEST DIR TITLE="Add revision control to:" PATH="' || PATH || '" VAR=PRJDIR'
  28.  
  29.     if ((RC = 0) & (PRJDIR ~= "")) then do
  30.  
  31.         'EXPAND NAME="' || PRJDIR || '" VAR=PRJDIR'
  32.  
  33.         if (RC = 0) then do
  34.  
  35.             PRJNAME = ""
  36.  
  37.             /* project directory already controlled by RCS ? */
  38.  
  39.             if (exists(PRJDIR || "rcs_link")) then do
  40.  
  41.                 'REQUEST PROBLEM="RCS already installed for this drawer."'
  42.  
  43.                 call rcs_exit
  44.             end
  45.  
  46.             if (exists(PRJDIR || "RCS") | exists(PRJDIR || "snapshot") | exists("PRJDIR || RCS_link")) then do
  47.  
  48.                 'REQUEST PROBLEM="Name conflict - can not add RCS control*nto this drawer. This directory seems to*nbe under RCS control but has not been*nconfigured with RCS for GoldED."'
  49.  
  50.                 call rcs_exit
  51.             end
  52.  
  53.             /* obtain intial description and comment */
  54.  
  55.             do while (PRJNAME = "")
  56.  
  57.                 'REQUEST STRING TITLE="' || PRJDIR || '" BODY="Choose a unique name for your project:" VAR=PRJNAME'
  58.  
  59.                 if (RC ~= 0) then
  60.  
  61.                     call rcs_exit
  62.  
  63.                 if (PRJNAME ~= "") then do
  64.  
  65.                     if (compress(PRJNAME, '*|"''') ~= PRJNAME) then do
  66.  
  67.                         'REQUEST PROBLEM="Project name contains invalid character(s)"'
  68.  
  69.                         PRJNAME = ""
  70.                     end
  71.                 end
  72.             end
  73.  
  74.             'REQUEST STRING BODY="Please describe your project:" VAR=PRJCOMMENT OLD="' || PRJNAME || '"'
  75.  
  76.             if (RC = 0) then do
  77.  
  78.                 'QUERY $LOGNAME VAR=LOGNAME'
  79.  
  80.                 CONFIG.CFG_CONFIG   = PRJDIR || "RCS_config"
  81.                 CONFIG.CFG_WORK.1   = PRJDIR
  82.                 CONFIG.CFG_NAME     = PRJNAME
  83.                 CONFIG.CFG_PATH     = PRJDIR
  84.                 CONFIG.CFG_COMMENT  = PRJCOMMENT
  85.                 CONFIG.CFG_SNAPSHOT = ""
  86.                 CONFIG.CFG_FILES    = 0
  87.                 CONFIG.CFG_USERS    = 1
  88.                 CONFIG.CFG_USER.1   = LOGNAME
  89.  
  90.                 call rcs_createworkdir 1
  91.  
  92.                 'REQUEST TITLE="Project *"' || CONFIG.CFG_NAME || '*"" BODY="Select the documents (text files)*nto be put under RCS control. This*nwould typically be the files you*nplan to edit with GoldED." BUTTON="!SELECT"'
  93.  
  94.                 if (RC = 0) then do
  95.  
  96.                     'REQUEST FILES PATH="' || CONFIG.CFG_PATH || '" TITLE="Control these documents..." VAR=LIST'
  97.  
  98.                     /* process list of files */
  99.  
  100.                     if ((RC = 0) & (LIST ~= "")) then do
  101.  
  102.                         MAX = length(LIST)
  103.                         POS = 1
  104.  
  105.                         /* parse list of files ("file" "file" "file" ...) */
  106.  
  107.                         FILE = 0
  108.  
  109.                         do while (POS <= MAX)
  110.  
  111.                             do while ((substr(LIST, pos, 1) = " ") | (substr(LIST, pos, 1) = '"'))
  112.  
  113.                                 POS = POS + 1
  114.  
  115.                                 if (POS > MAX) then
  116.  
  117.                                     leave
  118.                             end
  119.  
  120.                             START = POS
  121.  
  122.                             LEN = 0
  123.  
  124.                             do while (POS <= MAX)
  125.  
  126.                                 DATA = substr(LIST, POS, 1)
  127.  
  128.                                 if ((DATA = ':') | (DATA = '/')) then do
  129.  
  130.                                     START = POS + 1
  131.                                     POS   = POS + 1
  132.                                     LEN   = 0
  133.                                 end
  134.                                 else if (DATA = '"') then do
  135.  
  136.                                     leave
  137.                                 end
  138.                                 else do
  139.  
  140.                                     LEN = LEN + 1
  141.                                     POS = POS + 1
  142.                                 end
  143.                             end
  144.  
  145.                             if (LEN ~= 0) then do
  146.  
  147.                                 DATA = substr(LIST, START, LEN)
  148.  
  149.                                 if (index(DATA, " ") ~= 0) then do
  150.  
  151.                                     OLD = DATA
  152.  
  153.                                     do while (index(DATA, " ") ~= 0)
  154.  
  155.                                         'REQUEST TITLE="' || DATA || '" BODY="File name contains white space. RCS*ncan not handle white space in file*nnames. Would you like to rename the*nfile or should it be excluded from*nrevision control ?" BUTTON="!RENAME|E_xclude|_Cancel"'
  156.  
  157.                                         if ((RC ~= 0) | (RESULT = 0)) then
  158.  
  159.                                             call rcs_exit
  160.  
  161.                                         if (RESULT = 2) then
  162.  
  163.                                             leave
  164.  
  165.                                         'REQUEST STRING BODY="Please choose new file name:" OLD="' || DATA || '" VAR=DATA'
  166.  
  167.                                     end
  168.  
  169.                                     if (DATA ~= OLD) then do
  170.  
  171.                                         shell
  172.  
  173.                                         'rename "' || OLD || '" "' || DATA || '"'
  174.  
  175.                                         shell
  176.  
  177.                                         if (exists(DATA) = 0) then do
  178.  
  179.                                             'REQUEST PROBLEM="Error while renaming file."'
  180.  
  181.                                             call rcs_exit
  182.                                         end
  183.                                     end
  184.  
  185.                                 end
  186.  
  187.                                 if (index(DATA, " ") = 0) then do
  188.  
  189.                                     FILE = FILE + 1
  190.  
  191.                                     CONFIG.CFG_SETUP.FILE = DATA
  192.                                 end
  193.                             end
  194.                         end
  195.  
  196.                         CONFIG.CFG_FILES = FILE
  197.  
  198.                         call rcs_getrevision "1.0 Initial revision code for your files"
  199.  
  200.                         PRJREVISION = RESULT
  201.  
  202.                         call rcs_createsnapshot
  203.  
  204.                         /* create initial description */
  205.  
  206.                         'QUERY DATE VAR=DATE'
  207.  
  208.                         shell
  209.  
  210.                         'echo >t:rcs.logmsg "' || CONFIG.CFG_COMMENT || '"'
  211.  
  212.                         'echo >>t:rcs.logmsg "RCS for GoldED · Initial login date: ' || DATE || '"'
  213.  
  214.                         shell
  215.  
  216.                         /* create private files and drawers */
  217.  
  218.                         call rcs_initialize
  219.  
  220.                         call rcs_savecfg
  221.  
  222.                         /* log in files */
  223.  
  224.                         if (CONFIG.CFG_FILES ~= 0) then do
  225.  
  226.                             ERRORS = 0
  227.  
  228.                             do FILE = 1 to CONFIG.CFG_FILES
  229.  
  230.                                 'REQUEST STATUS="' || CONFIG.CFG_SETUP.FILE '"'
  231.  
  232.                                 /* check in file */
  233.  
  234.                                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:ci -tt:rcs.logmsg -r' || PRJREVISION || ' *"' || CONFIG.CFG_SETUP.FILE || '*""'
  235.  
  236.                                 /* successful ? */
  237.  
  238.                                 if (exists(CONFIG.CFG_PATH || "rcs/" || CONFIG.CFG_SETUP.FILE) = 0) then do
  239.  
  240.                                     /* try again (with output) */
  241.  
  242.                                     shell
  243.  
  244.                                     'rcs:ci -tt:rcs.logmsg -r' || PRJREVISION || ' "' || CONFIG.CFG_SETUP.FILE || '"'
  245.  
  246.                                     shell
  247.  
  248.                                     if (exists(CONFIG.CFG_PATH || "rcs/" || CONFIG.CFG_SETUP.FILE) = 0) then
  249.  
  250.                                         ERRORS = ERRORS + 1
  251.                                 end
  252.                             end
  253.  
  254.                             'REQUEST STATUS=""'
  255.  
  256.                             if (ERRORS = 0) then do
  257.  
  258.                                 'REQUEST BODY="RCS configuration for *"' || CONFIG.CFG_NAME || '*" completed." BUTTON="!OK"'
  259.  
  260.                                 'DIR NEW ' || CONFIG.CFG_PATH
  261.                             end
  262.                             else
  263.                                 'REQUEST PROBLEM="' || ERRORS || ' error(s) - ci failed to check in files.*nPlease use the ci command to login*nthe remaining files."'
  264.                         end
  265.  
  266.                         'FILE DELETE FORCE NAME="t:rcs.logmsg"'
  267.                     end
  268.                 end
  269.             end
  270.         end
  271.     end
  272. end
  273.  
  274. /* ---------------------------- END OF YOUR CODE --------------------- */
  275.  
  276. 'UNLOCK' /* VERY important: unlock GUI */
  277.  
  278. exit
  279.  
  280. SYNTAX:
  281.  
  282. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  283.  
  284. 'UNLOCK'
  285.  
  286. exit
  287.  
  288. /* /// "rcs_login" */
  289.  
  290. rcs_login: procedure expose CONFIG.
  291.  
  292.     if ((exists("rcs:ci") = 0) | (exists("rcs:co") = 0) | (exists("rcs:rcs") = 0) | (exists("rcs:setuprcs") = 0)) then do
  293.  
  294.         'REQUEST PROBLEM="File(s) missing - Please install and|configure HWRCS before you continue"'
  295.  
  296.         call rcs_exit
  297.     end
  298.  
  299.     'QUERY $LOGNAME VAR=LOGNAME'
  300.  
  301.     if (INDEX(LOGNAME, " ") ~= 0) then do
  302.  
  303.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  304.  
  305.         LOGNAME = ""
  306.     end
  307.  
  308.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  309.  
  310.         if (VERBOSE = "TRUE") then
  311.             'REQUEST PROBLEM="Please log in before you proceed.*nIt is required that every member of your*nworkgroup logs in under a unique name.*nLogin names will be used to keep track of*nthe files used and modified by various*nmembers of your workgroup.*n" BUTTON="!OK"'
  312.         else
  313.             'REQUEST PROBLEM="Please log in before you proceed."'
  314.  
  315.         call rcs_quicklogin
  316.     end
  317.  
  318.     return
  319.  
  320. /* /// */
  321. /* /// "rcs_quicklogin" */
  322.  
  323. rcs_quicklogin: procedure expose CONFIG.
  324.  
  325.     'QUERY $LOGNAME VAR=LOGNAME'
  326.  
  327.     if (INDEX(LOGNAME, " ") ~= 0) then do
  328.  
  329.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  330.  
  331.         LOGNAME = ""
  332.     end
  333.  
  334.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  335.  
  336.         do while ((LOGNAME = "") | (LOGNAME = "0"))
  337.  
  338.             'REQUEST STRING TITLE="Login" VAR=LOGNAME'
  339.  
  340.             if (RC ~= 0) then do
  341.  
  342.                 'UNLOCK'
  343.  
  344.                 exit
  345.             end
  346.  
  347.             if (INDEX(LOGNAME, " ") ~= 0) then do
  348.  
  349.                 'REQUEST PROBLEM="Login name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  350.  
  351.                 LOGNAME = ""
  352.             end
  353.             else if ((LOGNAME = "") | (LOGNAME = "0")) then
  354.  
  355.                 'REQUEST PROBLEM="Anonymous login not supported"'
  356.  
  357.             else do
  358.  
  359.                 'SET $LOGNAME "' || LOGNAME || '"'
  360.  
  361.                 'REQUEST STATUS="Logged in as ' || LOGNAME || '."'
  362.  
  363.                 break
  364.             end
  365.         end
  366.     end
  367.  
  368.     return
  369.  
  370. /* /// */
  371. /* /// "rcs_getrevision" */
  372.  
  373. rcs_getrevision:
  374.  
  375.     parse arg ARGOLD ARGTITLE
  376.  
  377.     'REQUEST STRING TITLE="' || substr(ARGTITLE, 2) || '" BODY="Set a revision code (format: x.y):" OLD="' || ARGOLD || '"'
  378.  
  379.     if (RC ~= 0) then
  380.  
  381.         call rcs_exit
  382.  
  383.     return RESULT
  384.  
  385. /* /// */
  386. /* /// "rcs_savecfg" */
  387.  
  388. rcs_savecfg: procedure expose CONFIG.
  389.  
  390.     R = open('CONFIG', CONFIG.CFG_CONFIG, 'WRITE')
  391.  
  392.     if (R = 0) then
  393.  
  394.         'REQUEST PROBLEM="Couldn''t save configuration file"'
  395.  
  396.     else do
  397.  
  398.         'QUERY DATE VAR=DATE'
  399.  
  400.         R = writeln('CONFIG', "[NAME]")
  401.         R = writeln('CONFIG', CONFIG.CFG_NAME)
  402.         R = writeln('CONFIG', "")
  403.  
  404.         R = writeln('CONFIG', "[PATH]")
  405.         R = writeln('CONFIG', CONFIG.CFG_PATH)
  406.         R = writeln('CONFIG', "")
  407.  
  408.         R = writeln('CONFIG', "[SNAPSHOT]")
  409.         R = writeln('CONFIG', CONFIG.CFG_SNAPSHOT)
  410.  
  411.         if (CONFIG.CFG_SNAPSHOT ~= "") then
  412.  
  413.             R = writeln('CONFIG', "")
  414.  
  415.         R = writeln('CONFIG', "[COMMENT]")
  416.         R = writeln('CONFIG', CONFIG.CFG_COMMENT)
  417.  
  418.         if (CONFIG.CFG_COMMENT ~= "") then
  419.  
  420.             R = writeln('CONFIG', "")
  421.  
  422.         R = writeln('CONFIG', "[USER]")
  423.  
  424.         if (CONFIG.CFG_USERS ~= 0) then do
  425.  
  426.             do USER = 1 to CONFIG.CFG_USERS
  427.  
  428.                 R = writeln('CONFIG', CONFIG.CFG_USER.USER)
  429.  
  430.             end
  431.         end
  432.  
  433.         R = writeln('CONFIG', "")
  434.  
  435.         R = writeln('CONFIG', "[WORK]")
  436.  
  437.         if (CONFIG.CFG_USERS ~= 0) then do
  438.  
  439.             do USER = 1 to CONFIG.CFG_USERS
  440.  
  441.                 R = writeln('CONFIG', CONFIG.CFG_WORK.USER)
  442.  
  443.             end
  444.         end
  445.  
  446.         R = writeln('CONFIG', "")
  447.  
  448.         R = writeln('CONFIG', "[FILES]")
  449.  
  450.         if (CONFIG.CFG_FILES ~= 0) then do
  451.  
  452.             do FILE = 1 to CONFIG.CFG_FILES
  453.  
  454.                 R = writeln('CONFIG', CONFIG.CFG_SETUP.FILE)
  455.  
  456.             end
  457.         end
  458.  
  459.         R = close('CONFIG')
  460.     end
  461.  
  462.     return
  463.  
  464. /* /// */
  465. /* /// "rcs_exit" */
  466.  
  467. rcs_exit:
  468.  
  469.     'UNLOCK'
  470.  
  471.     exit
  472.  
  473.     return
  474.  
  475. /* /// */
  476. /* /// "rcs_createsnapshot" */
  477.  
  478. rcs_createsnapshot: procedure expose CONFIG.
  479.  
  480.     'REQUEST BODY="Create snapshot directory ?" BUTTON="!CREATE|_Help|_Skip|_Cancel"'
  481.  
  482.     if ((RC ~= 0) | (RESULT = 0)) then
  483.  
  484.         call rcs_exit
  485.  
  486.     if (RESULT = 3) then                             /* DISABLE */
  487.  
  488.         CONFIG.CFG_SNAPSHOT = ""
  489.  
  490.     if ((RESULT = 1) | (RESULT = 2)) then do         /* OK, HELP */
  491.  
  492.         SNAPSHOT = CONFIG.CFG_SNAPSHOT
  493.  
  494.         if (SNAPSHOT = "") then
  495.  
  496.             SNAPSHOT = "snapshot"
  497.  
  498.         if (RESULT = 2) then do
  499.  
  500.             if (INDEX(SNAPSHOT, ":") = 0) then
  501.                 MESSAGE = "This will create the new directory|""" || SNAPSHOT || """ in your project directory.|The snapshot directory will always|contain recent read-only copies of|your files.||A snapshot directory typically is|used to publish a recent version|of your project on a network. Your|compiler will find the source codes|in the snapshot directory if you|are a developer (you will have to|update your makefile)."
  502.             else
  503.                 MESSAGE = "This will create the new directory|""" || SNAPSHOT || """. The snapshot directory|will always contain recent read-only|copies of your files.||A snapshot directory typically is|used to publish a recent version|of your project on a network. Your|compiler will find the source codes|in the snapshot directory if you|are a developer (you may need to|update your makefile)."
  504.  
  505.             'FIX VAR=MESSAGE'
  506.  
  507.             'REQUEST BODY="' || MESSAGE || '" BUTTON="!CREATE|_Cancel"'
  508.         end
  509.         else
  510.             RESULT = 1
  511.  
  512.         if ((RC = 0) & (RESULT = 1)) then do
  513.  
  514.             if (INDEX(SNAPSHOT, ":") = 0) then
  515.  
  516.                 SNAPSHOT = CONFIG.CFG_PATH || SNAPSHOT
  517.  
  518.             'REQUEST STATUS="Creating snapshot - please wait ..."'
  519.  
  520.             'FILE NEWDIR NAME="' || SNAPSHOT || '"'
  521.  
  522.             if (exists(SNAPSHOT) = 0) then do
  523.  
  524.                 'REQUEST PROBLEM="Couldn''t create snapshot directory"'
  525.  
  526.                 SNAPSHOT = ""
  527.             end
  528.             else  do
  529.  
  530.                 'EXPAND NAME="' || SNAPSHOT || '" VAR=SNAPSHOT'
  531.  
  532.                 if (CONFIG.CFG_FILES ~= 0) then do
  533.  
  534.                     shell
  535.  
  536.                     do FILE = 1 to CONFIG.CFG_FILES
  537.  
  538.                         'copy "' || CONFIG.CFG_PATH || CONFIG.CFG_SETUP.FILE || '" "' || SNAPSHOT || '"'
  539.  
  540.                         'protect "' || SNAPSHOT || CONFIG.CFG_SETUP.FILE || '" W SUB'
  541.                     end
  542.  
  543.                     shell
  544.                 end
  545.             end
  546.         end
  547.         else
  548.             SNAPSHOT = ""
  549.  
  550.         CONFIG.CFG_SNAPSHOT = SNAPSHOT
  551.     end
  552.  
  553.     return
  554.  
  555. /* /// */
  556. /* /// "rcs_initialize" */
  557.  
  558. rcs_initialize: procedure expose CONFIG.
  559.  
  560.     R = pragma('D', CONFIG.CFG_PATH)
  561.  
  562.     do forever
  563.  
  564.         shell
  565.  
  566.         if (exists("rcs") = 0) then
  567.  
  568.             'makedir "rcs"'
  569.  
  570.         if (exists("rcs")) then do
  571.  
  572.             'echo >RCS_link "RCS"'
  573.  
  574.             'echo >>RCS_link ""'
  575.  
  576.             'echo >>RCS_link "ignore: .rcsfreeze.???"'
  577.         end
  578.  
  579.         shell
  580.  
  581.         if ((exists("RCS") = 0) | (exists("RCS_link") = 0)) then do
  582.  
  583.             'REQUEST BODY="Initialization errror (rcs:setuprcs failed)" BUTTON="!RETRY"'
  584.  
  585.             if (RC ~= 0) then
  586.  
  587.                 call rcs_exit
  588.         end
  589.         else
  590.             leave
  591.     end
  592.  
  593.     return
  594.  
  595. /* /// */
  596. /* /// "rcs_getrevision" */
  597.  
  598. rcs_getrevision:
  599.  
  600.     parse arg ARGOLD ARGTITLE
  601.  
  602.     'REQUEST STRING TITLE="' || substr(ARGTITLE, 2) || '" BODY="Set a revision code (format: x.y):" OLD="' || ARGOLD || '"'
  603.  
  604.     if (RC ~= 0) then
  605.  
  606.         call rcs_exit
  607.  
  608.     return RESULT
  609.  
  610. /* /// */
  611. /* /// "rcs_createworkdir" */
  612.  
  613. rcs_createworkdir: procedure expose CONFIG.
  614.  
  615.     parse arg USER
  616.  
  617.     'REQUEST BODY="Please choose your working directory.*nEach member of your workgroup should*nhave a private working directory for*nthis project (on your local machine)." BUTTON="!OK"'
  618.  
  619.     if (RC = 0) then do
  620.  
  621.         do forever
  622.  
  623.             'REQUEST DIR SAVE TITLE="Working directory..." PATH="sys:" VAR=PRJWORK'
  624.  
  625.             if (RC = 0) then do
  626.  
  627.                 'EXPAND NAME="' || PRJWORK || '" VAR=PRJWORK'
  628.  
  629.                 CONFIG.CFG_WORK.USER = PRJWORK
  630.  
  631.                 if (exists(PRJWORK || "rcs_link") = 0) then do
  632.  
  633.                     if (exists(PRJWORK || "rcs_root") = 0) then do
  634.  
  635.                         call rcs_savelink USER
  636.  
  637.                         leave
  638.                     end
  639.                     else
  640.                         'REQUEST PROBLEM="This directory is already used as*nworking directory by another user*nor for another project and can not*nbe selected again."'
  641.                 end
  642.                 else
  643.                     leave
  644.             end
  645.             else
  646.                 call rcs_exit
  647.         end
  648.     end
  649.  
  650.     return
  651.  
  652. /* /// */
  653. /* /// "rcs_savelink" */
  654.  
  655. rcs_savelink: procedure expose CONFIG.
  656.  
  657.     parse arg USER
  658.  
  659.     if (USER ~= 0) then do
  660.  
  661.         PATH = CONFIG.CFG_WORK.USER || 'RCS_root'
  662.  
  663.         R = open('CONFIG', PATH, 'WRITE')
  664.  
  665.         if (R = 0) then
  666.  
  667.             'REQUEST PROBLEM="Failed to save local configuration."'
  668.  
  669.         else do
  670.  
  671.             R = writeln('CONFIG', "[CONFIG]")
  672.  
  673.             R = writeln('CONFIG', CONFIG.CFG_PATH)
  674.  
  675.             R = close('CONFIG')
  676.         end
  677.     end
  678.  
  679.     return
  680.  
  681. /* /// */
  682. /* /// "rcs_readlink" */
  683.  
  684. rcs_readlink: procedure expose CONFIG.
  685.  
  686.     parse arg PATH
  687.  
  688.     R = open('CONFIG', PATH || "RCS_root", 'READ')
  689.  
  690.     if (R = 0) then do
  691.  
  692.         'REQUEST PROBLEM="Couldn''t read configuration file"'
  693.  
  694.         call rcs_exit
  695.     end
  696.     else do forever
  697.  
  698.         DATA = readln('CONFIG')
  699.  
  700.         if (eof('CONFIG')) then do
  701.  
  702.             R = close('CONFIG')
  703.  
  704.             leave
  705.         end
  706.  
  707.         if (eof('CONFIG')) then
  708.  
  709.             leave
  710.  
  711.         if (left(DATA, 8) = "[CONFIG]") then
  712.  
  713.             PATH = readln('CONFIG')
  714.     end
  715.  
  716.     return PATH
  717.  
  718. /* /// */
  719.